package com.bjpowernode.crm.web.controller;

import com.bjpowernode.crm.pojo.User;
import com.bjpowernode.crm.service.UserService;
import com.bjpowernode.crm.utils.MD5Util;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("user")
public class UserController {
    @Resource
    private  UserService userService;

    //市场活动的加载下拉选
    @RequestMapping("listOwner.json")
    @ResponseBody
    public List<String> getOption(){
        List<String> option = userService.getOption();
        return option;
    }

    @RequestMapping("loginCheck.do")
    @ResponseBody
    public Map loginCheck(String loginAct, String loginPwd, boolean loginAuto, HttpServletResponse response, HttpServletRequest request){
        //根据需求：获取用户的ip地址,用来交给业务逻辑层判断是否拥有ip访问权限
        String remoteAddr = request.getRemoteAddr();
        //将数据业务逻辑层：
        User user = userService.findUserByActPwd(loginAct,loginPwd,remoteAddr);

        //将成功验证的数据存到session里，作登录证明
        request.getSession().setAttribute("loginUser",user);

        //验证用户是否点击了 十天免登陆 按钮
        if(loginAuto){//表示点击了
            //需要将账户和密码存放到cookie对象中
            Cookie actCookie = new Cookie("loginAct",loginAct);
            //并设置有效时间 10 天
            actCookie.setMaxAge(3600*24*10);//单位是秒
            //我们在将密码保存到客户端的时候，需要进行加密保存！如此才能保证客户的信息安全
            loginPwd = MD5Util.getMD5(loginPwd);
            Cookie pwdCookie = new Cookie("loginPwd", loginPwd);
            //设置密码保存时间
            pwdCookie.setMaxAge(3600*24*10);

            //设置cookie数据在同一个web应用的根目录下【webapp目录就是根目录,/表示根目录】
            // 都可以获取得到存放的cookie数据
            actCookie.setPath("/");
            pwdCookie.setPath("/");


            //将cookie对象存到用户端：
            response.addCookie(actCookie);
            response.addCookie(pwdCookie);


        }

        return new HashMap(){
            {
                put("success",true);
            }
        };
    }


    //退出功能
    @RequestMapping("logout.do")
    public String logout(HttpSession session,HttpServletResponse response){
        /*退出系统，则清除当前session对象，并清除Cookie对象，
        目的：使得用户账号安全性
        一般情况下，退出功能，建议清除cookie：例，外出办公结束，不再该电脑上再使用，客户点击退出系统，即可实现清除cookie对象，安全大一一切*/

        //清除session对象
        session.removeAttribute("loginUser");

        //清除Cookie对象:将原本存入的cookie对象的有效时间设置为0,即可实现清除Cookie对象
        //设置账户或者密码中的一个即可，只有一个为null或者失效，那么就不会成功了
        Cookie cookie = new Cookie("loginAct", null);//name一定要和存储在客户端的name一致，不然改变不了
        cookie.setMaxAge(0);
        cookie.setPath("/");
        response.addCookie(cookie);

        return "index";//成功后返回首页

    }



}
